﻿using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using MySql.Data.MySqlClient;
using MySql.Data.Types;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Collections.Generic;

namespace GCon
{
    /// <summary>
    /// Clase contenedora de Grupo
    /// </summary>
    public class Con_Grupo
    {
        public Con_Grupo()
        {
        }

        public Con_Grupo(String ID_PK, String NOMBRE, String HORARIO, String CODIGO, String ESTADO_GRUPO_ID_PK, String FECHA_INICIO, String FECHA_FIN)
        {
            _ID_PK = ID_PK;
            _NOMBRE = NOMBRE;
            _HORARIO = HORARIO;
            _CODIGO = CODIGO;
            _ESTADO_GRUPO_ID_PK = ESTADO_GRUPO_ID_PK;
            _FECHA_INICIO = FECHA_INICIO;
            _FECHA_FIN = FECHA_FIN;
        }
        public Con_Grupo(Con_Grupo otra)
        {
            _ID_PK = otra._ID_PK;
            _NOMBRE = otra._NOMBRE;
            _HORARIO = otra._HORARIO;
            _CODIGO = otra._CODIGO;
            _ESTADO_GRUPO_ID_PK = otra._ESTADO_GRUPO_ID_PK;
            this._FECHA_INICIO = otra._FECHA_INICIO;
            this._FECHA_FIN = otra._FECHA_FIN;
        }

        /// Getters
        public String Get_ID_PK()
        {
            return this._ID_PK;
        }
        public String Get_NOMBRE ()
        {
            return this._NOMBRE;
        }
        public String Get_HORARIO ()
        {
            return this._HORARIO;
        }
        public String Get_GRUPO_CODIGO()
        {
            return this._CODIGO;
        }
        public String Get_ESTADO_GRUPO_ID_PK()
        {
            return this._ESTADO_GRUPO_ID_PK;
        }
        public String Get_FECHA_INICIO()
        {
            return this._FECHA_INICIO;
        }
        public String Get_FECHA_FIN()
        {
            return this._FECHA_FIN;
        }

        /// Setters
        public void Set_ID_PK(String parametro)
        {
            this._ID_PK = parametro;
        }
        public void Set_NOMBRE(String parametro)
        {
            this._NOMBRE = parametro;
        }
        public void Set_HORARIO(String parametro)
        {
            this._HORARIO = parametro;
        }
        public void Set_GRUPO_CODIGO(String parametro)
        {
            this._CODIGO = parametro;
        }
        public void Set_ESTADO_GRUPO_ID_PK(String parametro)
        {
            this._ESTADO_GRUPO_ID_PK = parametro;
        }
        public void Set_FECHA_INICIO(String parametro)
        {
            this._FECHA_INICIO = parametro;
        }
        public void Set_FECHA_FIN(String parametro)
        {
            this._FECHA_FIN = parametro;
        }

        /// <summary>
        /// Procedimiento de carga.
        /// Recupera de la BBDD el grupo con Id = IdGrupo.
        /// </summary>
        /// <param name="IdGrupo"></param>
        public void CargaGrupo(int IdGrupo)
        {
            MySqlConnection oConexion;
            MySqlDataAdapter oAdaptador;
            DataSet ds;
            String llamada;

            oConexion = new MySqlConnection();
            oConexion.ConnectionString = "Server=localhost;Database=MERYLAND;Uid=root;Pwd=MERYLAND;";
            oConexion.Open();

            llamada = "CALL CargaGrupo ( '" + IdGrupo + "' );";
            oAdaptador = new MySqlDataAdapter(llamada, oConexion);
            ds = new DataSet();
            oAdaptador.Fill(ds, "Tabla");

            foreach (DataRow dr in ds.Tables[0].Rows)
            {
                this._ID_PK = dr["GRUPO_ID_PK"].ToString();
                this._NOMBRE = dr["GRUPO_NOMBRE"].ToString();
                this._HORARIO = dr["GRUPO_HORARIO"].ToString();
                this._CODIGO = dr["GRUPO_CODIGO"].ToString();
                this._ESTADO_GRUPO_ID_PK = dr["ESTADO_GRUPO_ID_PK"].ToString();
                this._FECHA_INICIO = dr["GRUPO_FECHA_INICIO"].ToString();
                this._FECHA_FIN = dr["GRUPO_FECHA_FIN"].ToString();
            }

            oConexion.Close();
        }

        /// <summary>
        /// Procedimiento de inserción.
        /// Inserta en la BBDD un Grupo.
        /// </summary>
        public void InsertaGrupo()
        {
            MySqlConnection oConexion;
            MySqlCommand oComando;
            String llamada;

            oConexion = new MySqlConnection();
            oConexion.ConnectionString = "Server=localhost;Database=MERYLAND;Uid=root;Pwd=MERYLAND;";

            llamada = "CALL InsertaGrupo ( '" + this._NOMBRE + "','" + this._HORARIO + "','" + this._CODIGO + "','" + this._ESTADO_GRUPO_ID_PK + "','" + this._FECHA_INICIO + "','" + this._FECHA_FIN + "' );";
            oComando = new MySqlCommand(llamada, oConexion);

            oConexion.Open();
            oComando.ExecuteReader();

            oConexion.Close();
        }

        /// <summary>
        /// Procedimiento de modificación.
        /// Modifica en la BBDD un Grupo.
        /// </summary>
        public void ModificaGrupo()
        {
            MySqlConnection oConexion;
            MySqlCommand oComando;
            String llamada;

            oConexion = new MySqlConnection();
            oConexion.ConnectionString = "Server=localhost;Database=MERYLAND;Uid=root;Pwd=MERYLAND;";

            llamada = "CALL ModificaGrupo ( '" + this._ID_PK + this._NOMBRE + "','" + this._HORARIO + "','" + this._CODIGO + "','" + this._ESTADO_GRUPO_ID_PK + "','" + this._FECHA_INICIO + "','" + this._FECHA_FIN + "' );";
            oComando = new MySqlCommand(llamada, oConexion);

            oConexion.Open();
            oComando.ExecuteReader();

            oConexion.Close();
        }

        /// <summary>
        /// Procedimiento de eliminación.
        /// Elimina de la BBDD un Grupo.
        /// </summary>
        public void EliminaGrupo()
        {
            MySqlConnection oConexion;
            MySqlCommand oComando;
            String llamada;

            oConexion = new MySqlConnection();
            oConexion.ConnectionString = "Server=localhost;Database=MERYLAND;Uid=root;Pwd=MERYLAND;";

            llamada = "CALL EliminaGrupo ( '" + this._ID_PK + "' );";
            oComando = new MySqlCommand(llamada, oConexion);

            oConexion.Open();
            oComando.ExecuteReader();

            oConexion.Close();
        }

        /// <summary>
        /// Procedimiento de asignacion de alumno a grupo.
        /// Mete un alumno de la BBDD a un Grupo.
        /// </summary>
        public void AsignaAlumnoAgrupo(String idAlumno)
        {
            MySqlConnection oConexion;
            MySqlCommand oComando;
            String llamada;

            oConexion = new MySqlConnection();
            oConexion.ConnectionString = "Server=localhost;Database=MERYLAND;Uid=root;Pwd=MERYLAND;";

            llamada = "CALL AsignaAlumnoAgrupo ( '" + idAlumno + "," + this._ID_PK + "' );";
            oComando = new MySqlCommand(llamada, oConexion);

            oConexion.Open();
            oComando.ExecuteReader();

            oConexion.Close();
        }

        /// <summary>
        /// Procedimiento de eliminacion de alumno a grupo.
        /// Elimina un alumno de la BBDD a un Grupo.
        /// </summary>
        public void EliminaAlumnoAgrupo(String idAlumno)
        {
            MySqlConnection oConexion;
            MySqlCommand oComando;
            String llamada;

            oConexion = new MySqlConnection();
            oConexion.ConnectionString = "Server=localhost;Database=MERYLAND;Uid=root;Pwd=MERYLAND;";

            llamada = "CALL EliminaAlumnoDeGrupo ( '" + idAlumno + "," + this._ID_PK + "' );";
            oComando = new MySqlCommand(llamada, oConexion);

            oConexion.Open();
            oComando.ExecuteReader();

            oConexion.Close();
        }

        public void IncidenciasDeGrupo()
        {
            MySqlConnection oConexion;
            MySqlDataAdapter oAdaptador;
            DataSet ds;
            String llamada;
            Con_Incidencia oIncidencia;

            oConexion = new MySqlConnection();
            oConexion.ConnectionString = "Server=localhost;Database=MERYLAND;Uid=root;Pwd=MERYLAND;";
            oConexion.Open();

            llamada = "CALL IncidenciasDeGrupo(" + this._ID_PK + ")";
            oAdaptador = new MySqlDataAdapter(llamada, oConexion);
            ds = new DataSet();
            oAdaptador.Fill(ds, "Tabla");

            foreach (DataRow dr in ds.Tables[0].Rows)
            {

                oIncidencia = new Con_Incidencia(dr["INCIDENCIA_ID_PK"].ToString(), dr["INCIDENCIA_TIPO"].ToString(), dr["INCIDENCIA_FECHA"].ToString(), dr["ALUMNO_ID_PK"].ToString(), dr["ALUMNO_NOMBRE"].ToString(), dr["ALUMNO_APELLIDO1"].ToString());
                _dIncidencias.Add(oIncidencia.Get_ID_PK(), oIncidencia);
                oIncidencia = null;

            }

            oConexion.Close();
        }

        /// Atributos
        private String _ID_PK;
        private String _NOMBRE;
        private String _HORARIO;
        private String _CODIGO;
        private String _ESTADO_GRUPO_ID_PK;
        private String _FECHA_INICIO;
        private String _FECHA_FIN;

        ///Lista de asignaturas q recibe un alumno
        private Dictionary<String, Con_Incidencia> _dIncidencias;
    }
}
